Make transparent tray icons work. (#320034, based on a patch by Dan
authorMatthias Clasen <mclasen@redhat.com>
Mon, 19 Jun 2006 23:53:28 +0000 (23:53 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 19 Jun 2006 23:53:28 +0000 (23:53 +0000)
2006-06-19  Matthias Clasen  <mclasen@redhat.com>

Make transparent tray icons work.  (#320034, based on a
patch by Dan Winship)

* gtk/gtktrayicon-x11.c (gtk_tray_icon_init): Make trayicons
app-paintable and non-double buffered.

* gtk/gtkrc.c (_gtk_rc_init): Give tray icons a parent-relative
background in the default style.

ChangeLog
ChangeLog.pre-2-10
gtk/gtkrc.c
gtk/gtktrayicon-x11.c

index d62521ec26edcbb33d400dc1207b80de292c8b1c..d7bbd4fd6ac66a94ff8dc913583cfa536f54d746 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2006-06-19  Matthias Clasen  <mclasen@redhat.com>
+
+       Make transparent tray icons work.  (#320034, based on a 
+       patch by Dan Winship)
+       
+       * gtk/gtktrayicon-x11.c (gtk_tray_icon_init): Make trayicons
+       app-paintable and non-double buffered. 
+
+       * gtk/gtkrc.c (_gtk_rc_init): Give tray icons a parent-relative
+       background in the default style.
+
 2006-06-19  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/updateiconcache.c: Marks strings for translation.  (#314278,
index d62521ec26edcbb33d400dc1207b80de292c8b1c..d7bbd4fd6ac66a94ff8dc913583cfa536f54d746 100644 (file)
@@ -1,3 +1,14 @@
+2006-06-19  Matthias Clasen  <mclasen@redhat.com>
+
+       Make transparent tray icons work.  (#320034, based on a 
+       patch by Dan Winship)
+       
+       * gtk/gtktrayicon-x11.c (gtk_tray_icon_init): Make trayicons
+       app-paintable and non-double buffered. 
+
+       * gtk/gtkrc.c (_gtk_rc_init): Give tray icons a parent-relative
+       background in the default style.
+
 2006-06-19  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/updateiconcache.c: Marks strings for translation.  (#314278,
index edc1d86c0afe606a2f5964f14907284080b78cac..e972f9785d002a1dabbaf364940c2739305d7ebf 100644 (file)
@@ -810,7 +810,12 @@ _gtk_rc_init (void)
                       "  text[PRELIGHT] = \"#ffffff\"\n"
                       "}\n"
                       "\n"
+                      "style \"gtk-default-tray-icon-style\" {\n"
+                      "  bg_pixmap[NORMAL] = \"<parent>\"\n"
+                      "}\n"
+                      "\n"
                       "class \"GtkProgressBar\" style : gtk \"gtk-default-progress-bar-style\"\n"
+                      "class \"GtkTrayIcon\" style : gtk \"gtk-default-tray-icon-style\"\n"
                       "widget \"gtk-tooltips*\" style : gtk \"gtk-default-tooltips-style\"\n"
                       "widget_class \"*<GtkMenuItem>*\" style : gtk \"gtk-default-menu-item-style\"\n"
                       "widget_class \"*<GtkMenuBar>*<GtkMenuItem>\" style : gtk \"gtk-default-menu-bar-item-style\"\n"
index 47badf791279f5d7aca5b601dc630b002ca0bea9..1c44ca0cb3756a70dec26c2e409d803319b71075 100755 (executable)
@@ -69,6 +69,8 @@ static void     gtk_tray_icon_realize   (GtkWidget   *widget);
 static void     gtk_tray_icon_unrealize (GtkWidget   *widget);
 static gboolean gtk_tray_icon_delete    (GtkWidget   *widget,
                                         GdkEventAny *event);
+static gboolean gtk_tray_icon_expose    (GtkWidget      *widget, 
+                                        GdkEventExpose *event);
 
 static void gtk_tray_icon_update_manager_window    (GtkTrayIcon *icon,
                                                    gboolean     dock_if_realized);
@@ -87,6 +89,7 @@ gtk_tray_icon_class_init (GtkTrayIconClass *class)
   widget_class->realize   = gtk_tray_icon_realize;
   widget_class->unrealize = gtk_tray_icon_unrealize;
   widget_class->delete_event = gtk_tray_icon_delete;
+  widget_class->expose_event = gtk_tray_icon_expose;
 
   g_object_class_install_property (gobject_class,
                                   PROP_ORIENTATION,
@@ -108,7 +111,9 @@ gtk_tray_icon_init (GtkTrayIcon *icon)
   
   icon->priv->stamp = 1;
   icon->priv->orientation = GTK_ORIENTATION_HORIZONTAL;
-  
+
+  gtk_widget_set_app_paintable (GTK_WIDGET (icon), TRUE);
+  gtk_widget_set_double_buffered (GTK_WIDGET (icon), FALSE);
   gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
 }
 
@@ -131,6 +136,19 @@ gtk_tray_icon_get_property (GObject    *object,
     }
 }
 
+static gboolean
+gtk_tray_icon_expose (GtkWidget      *widget, 
+                     GdkEventExpose *event)
+{
+  gdk_window_clear_area (widget->window, event->area.x, event->area.y,
+                        event->area.width, event->area.height);
+
+  if (GTK_WIDGET_CLASS (gtk_tray_icon_parent_class)->expose_event)  
+    return GTK_WIDGET_CLASS (gtk_tray_icon_parent_class)->expose_event (widget, event);
+
+  return FALSE;
+}
+
 static void
 gtk_tray_icon_get_orientation_property (GtkTrayIcon *icon)
 {